]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionUtils: Create and load the extension object when scanning
authorJasper St. Pierre <jstpierre@mecheye.net>
Mon, 4 Jun 2012 22:25:51 +0000 (18:25 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Tue, 12 Jun 2012 21:16:08 +0000 (17:16 -0400)
This reduces some duplicate code when loading extensions.

https://bugzilla.gnome.org/show_bug.cgi?id=677586

js/extensionPrefs/main.js
js/misc/extensionUtils.js
js/ui/extensionSystem.js

index 90fd9abc67f88186daa365c0bbfe3362217b8503..690b1c0350dbc518b426fa4c56cdf84f4140996e 100644 (file)
@@ -207,20 +207,9 @@ const Application = new Lang.Class({
         finder.scanExtensions();
     },
 
-    _extensionFound: function(signals, uuid, dir, type) {
-        if (ExtensionUtils.extensions[uuid] !== undefined)
-            return;
-
-        let extension;
-        try {
-            extension = ExtensionUtils.createExtensionObject(uuid, dir, type);
-        } catch(e) {
-            logError(e, 'Could not create extensions object');
-            return;
-        }
-
+    _extensionFound: function(signals, extension) {
         let iter = this._model.append();
-        this._model.set(iter, [0, 1], [uuid, extension.metadata.name]);
+        this._model.set(iter, [0, 1], [extension.uuid, extension.metadata.name]);
         this._extensionIters[uuid] = iter;
     },
 
index 3eaa1b9e4dd5b97c70c307c586b9ed6da93f3d2b..cec24ba1dd6c8bd74676aac37a41673e167788ae 100644 (file)
@@ -171,7 +171,14 @@ const ExtensionFinder = new Lang.Class({
                 continue;
             let uuid = info.get_name();
             let extensionDir = dir.get_child(uuid);
-            this.emit('extension-found', uuid, extensionDir, type);
+
+            let existing = extensions[uuid];
+            if (existing) {
+                log('Extension %s already installed in %s. %s will not be loaded'.format(uuid, existing.path, extensionDir.get_path()));
+                continue;
+            }
+            let extension = createExtensionObject(uuid, extensionDir, type);
+            this.emit('extension-found', extension);
         }
         fileEnum.close(null);
     },
index 902ecb691ff4d3b5ad95553f30678050f0597c29..6dde4665f3a38152ad982ad0219b02f1486b2e29 100644 (file)
@@ -129,35 +129,21 @@ function logExtensionError(uuid, message, state) {
                                                state: state });
 }
 
-function loadExtension(dir, type, enabled) {
-    let uuid = dir.get_basename();
-    let extension;
-
-    if (ExtensionUtils.extensions[uuid] != undefined) {
-        log('Extension "%s" is already loaded'.format(uuid));
-        return;
-    }
-
-    try {
-        extension = ExtensionUtils.createExtensionObject(uuid, dir, type);
-    } catch(e) {
-        logExtensionError(uuid, e.message);
-        return;
-    }
-
+function loadExtension(extension) {
     // Default to error, we set success as the last step
     extension.state = ExtensionState.ERROR;
 
     if (ExtensionUtils.isOutOfDate(extension)) {
-        logExtensionError(uuid, 'extension is not compatible with current GNOME Shell and/or GJS version', ExtensionState.OUT_OF_DATE);
+        logExtensionError(extension.uuid, 'extension is not compatible with current GNOME Shell and/or GJS version', ExtensionState.OUT_OF_DATE);
         extension.state = ExtensionState.OUT_OF_DATE;
         return;
     }
 
+    let enabled = enabledExtensions.indexOf(extension.uuid) != -1;
     if (enabled) {
-        initExtension(uuid);
+        initExtension(extension.uuid);
         if (extension.state == ExtensionState.DISABLED)
-            enableExtension(uuid);
+            enableExtension(extension.uuid);
     } else {
         extension.state = ExtensionState.INITIALIZED;
     }
@@ -263,9 +249,8 @@ function init() {
 
 function loadExtensions() {
     let finder = new ExtensionUtils.ExtensionFinder();
-    finder.connect('extension-found', function(signals, uuid, dir, type) {
-        let enabled = enabledExtensions.indexOf(uuid) != -1;
-        loadExtension(dir, type, enabled);
+    finder.connect('extension-found', function(signals, extension) {
+        loadExtension(extension);
     });
     finder.scanExtensions();
 }